package proxy_pattern.protect;

/**
 * @author 申书航
 * @version 1.0
 *
 * WizardTowerProxy类实现了WizardTower接口，通过控制访问来限制
 * 进入WizardTower的法师数量。
 */
public class WizardTowerProxy implements WizardTower {

    private static final int NUM_WIZARDS_ALLOWED = 3;

    private WizardTower wizardTower;

    private int currNumber;

    /**
     * 构造函数，接受一个WizardTower实例并进行初始化。
     *
     * @param wizardTower 需要代理的WizardTower实例
     */
    public WizardTowerProxy(WizardTower wizardTower) {
        this.wizardTower = wizardTower;
    }

    /**
     * 检查当前进入法师的数量是否超过限制。
     *
     * @return 如果未超过限制，返回true；否则返回false。
     */
    private boolean checkAccess() {
        return currNumber < WizardTowerProxy.NUM_WIZARDS_ALLOWED;
    }

    /**
     * 使法师进入WizardTower。如果当前进入法师数量未超过限制，
     * 则允许进入并更新当前数量；否则输出提示信息。
     *
     * @param wizard 试图进入的法师实例
     */
    @Override
    public void enter(Wizard wizard) {
        if (checkAccess()) {
            wizardTower.enter(wizard);
            currNumber++;
        }
        else {
            System.out.println("你已经达到最大限制，不能再进入！");
        }
    }
}
